#include <iostream>
#include <climits>
#include<vector>
#include<algorithm>
using namespace std;

void Test1(){
    int n,k,d;
    int V[51];
    long long results_max[51][11] = {0};
    long long results_min[51][11] = {0};
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>V[i];
        results_max[i][1] = V[i];
        results_min[i][1] = V[i];
    }
    cin>>k>>d;
    for(int i=2;i<=k;i++){
        for(int j=1;j<=n;j++){

            for(int m=max(j-d,1);m<j;m++){
                results_max[j][i] = max(max(results_max[m][i-1]*V[j],results_min[m][i-1]*V[j]),results_max[j][i]);
                results_min[j][i] = min(min(results_max[m][i-1]*V[j],results_min[m][i-1]*V[j]),results_min[j][i]);
            }
        }
    }
    long long max_res = INT_MIN;
    for(int i=1;i<=n;i++)
        if(results_max[i][k]>max_res){max_res=results_max[i][k];}
    cout<<max_res<<endl;
}

bool cmp(const pair<int, int>& a, const pair<int, int>& b)
{
    return a.first == b.first ? a.second > b.second : a.first < b.first;
}

int cal(vector<pair<int, int>>& nums, int n){
    sort(nums.begin(), nums.end(), cmp);

    vector<int> dp(n, 1);

    for(int i=1; i<n; i++){
        for(int j=0; j<i; j++){
            if(nums[i].second >= nums[j].second){
                dp[i] = max(dp[i], dp[j]+1);
            }
        }
    }

    int res = 1;
    for(int i=0; i<n; i++){
        res = max(res, dp[i]);
    }

    return res;
}

void Test2(){
    int n;
    while(cin >> n){
        vector<pair<int,int>> nums;
        int index, weight, height;
        for(int i=0; i<n; i++){
            cin >> index >> weight >> height;
            nums.push_back({weight, height});
        }

        cout << cal(nums, n) << endl;
    }
}


int main() {
    Test1();
    return 0;
}
